tm_medium=referral) on Unsplash
We can update the DOM with the Re:dom library in a way easier than plain JavaScript.
In this article, we’ll look at how to use the library to diff the DOM and patch it.
SVG
We can use the svg method to add SVGs.
For example, we can write:
import { svg, mount } from "redom";
const drawing = svg(
"svg",
svg(
"symbol",
{ id: "box", viewBox: "0 0 50 50" },
svg("rect", { x: 100, y: 100, width: 50, height: 50 })
),
svg("circle", { r: 50, cx: 100, cy: 100 }),
svg("use", { xlink: { href: "#box" } })
);
mount(document.body, drawing);
We add the center of the circle with cx and cy .
x and y are the coordinates of the top left corner.
width and height are the width and height.
Children
We can add the children to the component by writing:
import { el, setChildren } from "redom";
const p = el("p", "foo");
const div = el("div", "bar");
const span = el("span", "baz");
setChildren(document.body, [p, div, span]);
We call setChildren with an array of elements with the items.
Update Elements
The setAttr method lets us set the attributes of an element:
import { el, setAttr, mount } from "redom";
const hello = el("h1", "Hello!");
setAttr(hello, {
style: { color: "red" },
className: "hello"
});
mount(document.body, hello);
We set the style attribute to an object to set the styles.
className is the class attribute.
Also, we can set the styles with the setStyle method:
import { el, setStyle, mount } from "redom";
const hello = el("h1", "Hello!");
setStyle(hello, { color: "green" });
mount(document.body, hello);
Mount
The mount metho can be used to insert elements anywhere.
For example, we can write:
import { el, mount } from "redom";
const hello = el("h1", "Hello!");
mount(document.body, hello);
to append as a child of the body.
Also, we can insert before an element by providing a 3rd argument:
import { el, mount } from "redom";
const hello = el("h1", "Hello!");
mount(document.body, hello, document.body.firstChild);
It’ll insert the h1 before the first child of the body.
We can replace an existing element by passing in the old and new element and true as the 4th argument:
import { el, mount } from "redom";
const hello = el("h1", "Hello!");
const newElement = el("h1", "new");
mount(document.body, hello);
mount(document.body, newElement, hello, true);
The new element goes is the 2nd argument.
And the existing is in the 3rd argument.
Unmount
We can call unmount to unmount an element:
import { el, mount, unmount } from "redom";
const hello = el("h1", "Hello!");
mount(document.body, hello);
unmount(document.body, hello);
Components
We can create a component with a JavaScript class.
For example, we can write:
import { el, mount } from "redom";
class Hello {
constructor() {
this.el = el("h1");
}
update(data) {
this.el.textContent = `Hello ${data}`;
}
}
const hello = new Hello();
hello.update("world");
mount(document.body, hello);
to create a component with a plain JavaScript class.
In the constructor, we create an element.
Then we set the textContent property of this.el with our own content in the update method.
We then mount the component with mount into the body.
Conclusion
We can add components, update elements, and SVGs with Re:dom.